// app.js
const api = require('./utils/api.js')

App({
    globalData: {
        userInfo: null,
        isAdmin: false,
        userRole: null,  // 新增：用户角色 teacher/student/user
        openid: null,
        isLoggedIn: false,  // 新增：登录状态标识
        pendingAssetId: null  // 新增：扫码获取的待处理资产ID
    },

    onLaunch(options) {
        // 静默检查登录状态（不强制跳转）
        this.checkLoginStatus()

        // 检查版本更新
        this.checkUpdate()

        // 处理扫普通链接二维码进入小程序的场景
        this.handleScanQRCodeLaunch(options)
    },

    // 处理扫码场景
    handleScanQRCodeLaunch(options) {
        console.log('onLaunch options:', options)

        // scene 1047: 扫描小程序码
        // scene 1048: 扫描二维码（包含普通链接）
        // scene 1049: 长按小程序菜单唤起
        if (options.scene === 1047 || options.scene === 1048 || options.scene === 1011) {
            if (options.query && options.query.q) {
                // q参数包含完整的二维码URL
                const url = decodeURIComponent(options.query.q)
                console.log('扫码URL:', url)

                // 解析URL获取assetId
                const assetId = this.parseAssetIdFromUrl(url)

                if (assetId) {
                    console.log('解析到资产ID:', assetId)
                    // 保存到globalData，稍后跳转
                    this.globalData.pendingAssetId = assetId

                    // 延迟跳转，确保页面已加载
                    setTimeout(() => {
                        this.navigateToRepairWithAsset(assetId)
                    }, 500)
                }
            }
        }
    },

    // 从URL中解析assetId
    parseAssetIdFromUrl(url) {
        try {
            // 支持多种URL格式
            // https://yourdomain.com/device/repair?assetId=123
            // https://yourdomain.com/device/repair?assetId=123&other=param

            const match = url.match(/[?&]assetId=(\d+)/)
            if (match && match[1]) {
                return match[1]
            }
            return null
        } catch (error) {
            console.error('解析URL失败:', error)
            return null
        }
    },

    // 跳转到保修页面并传递资产ID
    navigateToRepairWithAsset(assetId) {
        wx.navigateTo({
            url: `/pages/repair/repair?assetId=${assetId}`,
            fail: (err) => {
                console.error('跳转失败:', err)
                // 如果跳转失败，可能是页面栈已满，尝试redirect
                wx.redirectTo({
                    url: `/pages/repair/repair?assetId=${assetId}`
                })
            }
        })
    },

    // 静默检查登录状态
    checkLoginStatus() {
        wx.login({
            success: res => {
                if (res.code) {
                    // 发送 res.code 到后台换取 openId, sessionKey, unionId
                    api.login(res.code).then(result => {
                        this.globalData.openid = result.openid
                        this.globalData.isAdmin = (result.role === 'admin') || (result.isAdmin || false)
                        this.globalData.userRole = result.role || 'user'

                        // 检查是否已注册
                        if (result.isRegistered) {
                            // 已注册，设置登录状态
                            this.globalData.isLoggedIn = true
                            this.globalData.userInfo = {
                                nickName: result.nickname,
                                avatarUrl: result.avatar,
                                phone: result.phone || ''
                            }
                        } else {
                            // 未注册，保持游客状态
                            this.globalData.isLoggedIn = false
                        }
                    }).catch(err => {
                        console.error('检查登录状态失败', err)
                        this.globalData.isLoggedIn = false
                    })
                }
            }
        })
    },

    // 判断是否已登录
    isLoggedIn() {
        return this.globalData.isLoggedIn && this.globalData.userInfo !== null
    },

    // 需要登录时的统一处理
    requireLogin(options = {}) {
        const {
            title = '需要登录',
            content = '请先登录后使用此功能',
            callback = null
        } = options

        return new Promise((resolve, reject) => {
            if (this.isLoggedIn()) {
                // 已登录，直接继续
                resolve(true)
                if (callback) callback(true)
            } else {
                // 未登录，显示提示并引导登录
                wx.showModal({
                    title: title,
                    content: content,
                    confirmText: '去登录',
                    cancelText: '取消',
                    success: res => {
                        if (res.confirm) {
                            // 跳转到登录页
                            wx.navigateTo({
                                url: '/pages/login/login'
                            })
                            reject(false)
                            if (callback) callback(false)
                        } else {
                            reject(false)
                            if (callback) callback(false)
                        }
                    }
                })
            }
        })
    },

    // 用户主动登录
    login(callback) {
        wx.login({
            success: res => {
                if (res.code) {
                    api.login(res.code).then(result => {
                        this.globalData.openid = result.openid
                        this.globalData.isAdmin = result.isAdmin || false
                        this.globalData.userRole = result.role || 'user'

                        if (result.isRegistered) {
                            // 已注册，设置登录状态
                            this.globalData.isLoggedIn = true
                            this.globalData.userInfo = {
                                nickName: result.nickname,
                                avatarUrl: result.avatar,
                                phone: result.phone || ''
                            }
                            if (callback) callback({ success: true, needRegister: false })
                        } else {
                            // 未注册，需要跳转到注册页
                            if (callback) callback({ success: true, needRegister: true })
                        }
                    }).catch(err => {
                        console.error('登录失败', err)
                        if (callback) callback({ success: false, error: err })
                    })
                }
            },
            fail: err => {
                console.error('wx.login失败', err)
                if (callback) callback({ success: false, error: err })
            }
        })
    },

    // 检查小程序版本更新
    checkUpdate() {
        const updateManager = wx.getUpdateManager()

        updateManager.onCheckForUpdate(res => {
            if (res.hasUpdate) {
                updateManager.onUpdateReady(() => {
                    wx.showModal({
                        title: '更新提示',
                        content: '新版本已经准备好，是否重启应用？',
                        success: modalRes => {
                            if (modalRes.confirm) {
                                updateManager.applyUpdate()
                            }
                        }
                    })
                })

                updateManager.onUpdateFailed(() => {
                    wx.showModal({
                        title: '更新失败',
                        content: '新版本下载失败，请删除小程序后重新搜索打开',
                        showCancel: false
                    })
                })
            }
        })
    }
})
